<?php
/**
 * Edition d'une traduction
 */
require_once("include/setup.php");
require_once(CLASS_PATH.'translation.class.php');
require_once(CLASS_PATH.'translation.history.class.php');
require_once(CLASS_PATH.'term.class.php');
require_once(HELPER_PATH.'file.helper.php');
require_once(HELPER_PATH.'image.helper.php');
LoginHelper::controlAccess(array('type_droits_user' => '>=2'));

$NB_CATEGORIES_MAX = 6; // Le nombre de catégorie max
$PATH_IMAGES_TRANSLATION = 'images/translations/';
$translation = new Translation($_REQUEST['id_translation']);
$error = false;
if (!empty($_POST['translation'])) {
	$edited = true;
	
	$translation->init($_POST['translation']);
	
	// Pour les catégories, on ne prend que celles non vides
	$categories = array_unique($_POST['translation']['categories']);
	$translation->categories = array();
	foreach ($categories as $c) {
		if (!empty($c)) {
			$translation->categories[] = $c;
		}
	}
	
	$term = $translation->getTerm();	
	
	$newterm = new Term($_POST['term']);
	if (empty($newterm->kana)) {
		Notification::add(Notification::$ERROR,"Merci de renseigner le kana");
		$error = true;
	}
	if (empty($translation->translation)) {
		Notification::add(Notification::$ERROR,"Merci de renseigner la traduction");
		$error = true;
	}
	
	if (!$error && ($newterm->kana != $term->kana || $newterm->tone != $term->tone || $newterm->pronunciation_romaji != $term->pronunciation_romaji)) { // Recherche ou création d'un nouveau terme
	
		$sterm = Term::getTerm(array(
			'kana' => $newterm->kana,
			'pronunciation_romaji' => $newterm->pronunciation_romaji,
			'tone' => $newterm->tone
		));
		
		if (empty($sterm) && $term->pronunciation_romaji != "") {
			$sterm = $newterm;
			$sterm->save();
		} else { // C'est un renseignement en plus
			$sterm = $term;
			$sterm->pronunciation_romaji = $newterm->pronunciation_romaji;
			$sterm->save();
		}
		
		$translation->id_term = $sterm->id_term;
		$translation->term = $sterm;
	}
	
	$havefile = false;
	$tempfilepath = "";
	$original_filename = "";
	
	if (!empty($_FILES['image'])) {
		$file = $_FILES['image'];
		
		switch($file['error']) {
			case UPLOAD_ERR_OK: // Succès
				$extension = file_get_extension($file['name']);
				if (!in_array($extension, array('.jpeg', '.jpg', '.png', '.gif'))) {
					Notification::add(Notification::$ERROR, "L'image doit être un .jpg, .png ou .gif.");
					$error = true;
				}
				else {
					$havefile = true;
					$tempfilepath = $file['tmp_name'];
					$original_filename = $file['name'];
				}
				break;
				
			case UPLOAD_ERR_FORM_SIZE:
				$size = $_POST['MAX_FILE_SIZE'];
				Notification::add(Notification::$ERROR, "La taille du fichier ne doit pas excéder ".file_sizeHumanReadable($size));
				$error = true;
				break;
			case UPLOAD_ERR_INI_SIZE:
				$size = ini_get('upload_max_filesize');
				Notification::add(Notification::$ERROR, "La taille du fichier ne doit pas excéder ".file_sizeHumanReadable($size));
				$error = true;
				break;
				
			case UPLOAD_ERR_NO_FILE:
				break;
				
			default:
				Notification::add(Notification::$ERROR, "Impossible de prendre en charge le fichier. Merci de ré-essayer.");
				$error = true;
				break;
		}
	}

	
	$user = LoginHelper::getUserConnected();
	$translation->last_update_id_user = $user->id_user;
	
	$creation = empty($translation->id_translation);
	$have_history = false;
	$have_changes = ($translation->haveChanges() || $havefile);
	
	if (!$creation) {
		$have_history = Translation_History::countTranslationsHistory(array(
			'id_translation' => $translation->id_translation
		));
		if ($have_history > 0) {
			$have_history = true;
		}
		else {
			$have_history = false;
		}
	}
	
	if (!$error && $translation->save()) {
		
		if ($havefile) {
			$extension = file_get_extension($original_filename);
			$filename = $translation->id_translation.'_'.time().$extension;
			$translation->image = $filename;
			
			move_uploaded_file($tempfilepath, $PATH_IMAGES_TRANSLATION.'original/'.$filename);
			
			
			ImageHelper::resize($PATH_IMAGES_TRANSLATION.'original/'.$filename, $PATH_IMAGES_TRANSLATION.'200/'.$filename, array('height' => 200));
			ImageHelper::resize($PATH_IMAGES_TRANSLATION.'original/'.$filename, $PATH_IMAGES_TRANSLATION.'100/'.$filename, array('height' => 100));
			
			$translation->save();
		}
		
		// Pour les nouvelles traductions ou les anciennes avec aucun historique
		if (!$have_history) {
			$base_translation = $translation;
			// Pour les anciennes, on met une ligne d'historique sans détail sur la dernière maj
			if (!$creation) {
				$base_translation = new Translation($translation->id_translation);
				$base_translation->last_update = null;
				$base_translation->last_update_id_user = null;
			}
			$base_translation->last_update_comment = null; // On enlève le 1er commentaire de toute facon
			$thistory = new Translation_History($base_translation);
			$thistory->save();
		}
		
		if (!$error && !$creation && $have_changes) {
			$thistory = new Translation_History($translation);
			$thistory->save();
		}

		
		Notification::add(Notification::$SUCCESS,"Le mot a été enregistré");
	}
	else if (!$error) {
		Notification::add(Notification::$ERROR,"Le mot n'a pas pû être enregistré.");
	}
}

// Ajout des texts input en plus pour avoir le nombre de catégories max
while (count($translation->categories) < $NB_CATEGORIES_MAX) {
	$translation->categories[] = "";
}


$v = new JapwordView();
$v->addNotifications();
$v->assign('translation', $translation);
$v->assign('breadcrumb',array(
	"Liste des mots" => 'translation_list.php',
	"Edition d'un mot" => ''
));

if (!empty($translation->id_translation)) {
	$v->display('translation_edit.html');
}
else {
	$v->display('translation_add.html');
}
?>